package other.edan.erp.utils;

import com.alibaba.fastjson.JSON;
import com.rkhd.platform.sdk.log.Logger;
import com.rkhd.platform.sdk.log.LoggerFactory;

/**
 * ClassName: LoggerUtils
 * Description: logger日志打印工具类
 * date: 2023/6/20
 *
 * @author Arende
 */
public class LoggerUtils {
    private static final Logger logger = LoggerFactory.getLogger();

    /**
     * debug日志打印
     *
     * @param message 打印message
     */
    public static void debug(String message) {
        logger.debug(message);
    }

    /**
     * debug日志打印(单个object参数)
     *
     * @param message
     * @param object
     */
    public static void debug(String message, Object object) {
        if (message.contains("{}")) {
            message = generateMessage(message, 0, object);
        } else {
            message = message + object;
        }
        logger.debug(message);
    }

    /**
     * debug日志打印(多个object参数)
     * 每个object参数需对应一个{}，且位置需保持一致
     *
     * @param message
     * @param args
     */
    public static void debug(String message, Object... args) {
        message = generateMessage(message, 0, args);
        logger.debug(message);
    }

    /**
     * info日志打印
     *
     * @param message 打印message
     */
    public static void info(String message) {
        logger.info(message);
    }

    /**
     * info日志打印(单个object参数)
     *
     * @param message
     * @param object
     */
    public static void info(String message, Object object) {
        if (message.contains("{}")) {
            message = generateMessage(message, 0, object);
        } else {
            message = message + object;
        }
        logger.info(message);
    }

    /**
     * info日志打印(多个object参数)
     * 每个object参数需对应一个{}，且位置需保持一致
     *
     * @param message
     * @param args
     */
    public static void info(String message, Object... args) {
        message = generateMessage(message, 0, args);
        logger.info(message);
    }

    /**
     * warn日志打印
     *
     * @param message 打印message
     */
    public static void warn(String message) {
        logger.warn(message);
    }

    /**
     * warn日志打印(单个object参数)
     *
     * @param message
     * @param object
     */
    public static void warn(String message, Object object) {
        if (message.contains("{}")) {
            message = generateMessage(message, 0, object);
        } else {
            message = message + object;
        }
        logger.warn(message);
    }

    /**
     * warn日志打印(多个object参数)
     * 每个object参数需对应一个{}，且位置需保持一致
     *
     * @param message
     * @param args
     */
    public static void warn(String message, Object... args) {
        message = generateMessage(message, 0, args);
        logger.warn(message);
    }

    /**
     * error日志打印
     *
     * @param message 打印message
     */
    public static void error(String message) {
        logger.error(message);
    }

    /**
     * error日志打印(单个object参数)
     *
     * @param message
     * @param object
     */
    public static void error(String message, Object object) {
        if (message.contains("{}")) {
            message = generateMessage(message, 0, object);
        } else {
            message = message + object;
        }
        logger.error(message);
    }

    /**
     * error日志打印(多个object参数)
     * 每个object参数需对应一个{}，且位置需保持一致
     *
     * @param message
     * @param args
     */
    public static void error(String message, Object... args) {
        message = generateMessage(message, 0, args);
        logger.error(message);
    }

    /**
     * 拼装返回消息
     *
     * @param message
     * @param index
     * @param objects
     * @return
     */
    public static String generateMessage(String message, int index, Object... objects) {
        if (!message.contains("{}") || index >= objects.length) {
            return message;
        }
        message = message.replaceFirst("\\{}", JSON.toJSONString(objects[index]));
        index++;
        return generateMessage(message, index, objects);
    }

}
